{
 "metadata": {
  "name": ""
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "#K-Nearest Neighbors\n",
      "<p>KNN is a form of <i>instance</i>, or <i>memory</i> based learning wherein we don't learn a function $f(X)$ to estimate $E[Y|X]$. Rather, to make a classification for a given instance $X_i$, we search the training data for the $k$ nearest neighbors, as defined by some distance metric $d(X_i,X_j)$. The estimate of $E[Y|X]$ is then given by:<br><br>\n",
      "\n",
      "<center>$E[Y|X] = \\sum\\limits_{y_i \\in N(X)}^k Y_i$</center><br><br>\n",
      "\n",
      "The most common distance function used in kNN is the <i>Euclidean Distance</i>.<br><br>\n",
      "\n",
      "Let $X = <x^1,...x^p>$ be a $p$-dimensional vector, then for two instances $i$ and $j$:<br><br>\n",
      "<center>$eud(X_i,X_j) = \\sqrt{(x_i^1-x_j^1)^2+...+(x_i^p-x_j^p)^2} = \\sqrt{\\sum\\limits_{t=1}^p (x_i^t-x_j^t)^2}$\n",
      "</center>\n",
      "<br><br>\n",
      "In the following example we run kNN on some real data from an ad conversion prediction dataset.\n",
      "</p>"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "'''\n",
      "This block loads the data, downsamples it, splits to train/test and rescales it.\n",
      "'''\n",
      "\n",
      "import pandas as pd\n",
      "import course_utils as bd\n",
      "reload(bd)\n",
      "\n",
      "#KNN is implemented as a class in sklearn.neighbors\n",
      "from sklearn.neighbors import KNeighborsClassifier\n",
      "from sklearn.metrics import confusion_matrix\n",
      "\n",
      "#Load data and downsample for a 50/50 split, then split into a train/test\n",
      "f = '/Users/briand/Desktop/ds course/datasets/ads_dataset_cut.txt'\n",
      "\n",
      "train_split = 0.5\n",
      "\n",
      "tdat = pd.read_csv(f,header=0,sep='\\t')\n",
      "moddat = bd.evenSplit(tdat,'y_buy')\n",
      "moddat_scale =bd.scaleData(moddat)\n",
      "\n",
      "#We know the dataset is sorted so we can just split by index\n",
      "train = moddat[:int(math.floor(moddat.shape[0]*train_split))]\n",
      "test = moddat[int(math.floor(moddat.shape[0]*train_split)):]\n",
      "\n",
      "#Scale the data to [0,1] interval...note that scaleData doesn't rescale by variance\n",
      "train_scale = moddat_scale[:int(math.floor(moddat_scale.shape[0]*train_split))]\n",
      "test_scale = moddat_scale[int(math.floor(moddat_scale.shape[0]*train_split)):]\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 4
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "\n",
      "def testKnn(k,train,test,lab,p=2):\n",
      "    '''\n",
      "    Run kNN classification and return accuracy \n",
      "    '''\n",
      "    X_train=train.drop(lab,1)\n",
      "    y_train=train[lab]\n",
      "    #Specify k and use p=2 for Euclidean distance\n",
      "    neigh = KNeighborsClassifier(n_neighbors=k,p=p)\n",
      "    #doesn't really fit the model in a classic sense, it does some intelligent partitioning of the data\n",
      "    neigh.fit(X_train,y_train)\n",
      "    #Get the predictions...note, this returns a class label prediction, not a probability\n",
      "    cm=confusion_matrix(neigh.predict(test.drop(lab,1)),test[lab])\n",
      "    return (cm[0][0]+cm[1][1])/float(sum(cm))"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 6
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "<p>Given a feature set and a distance function, the paramater that controls complexity is the number of neighbors used $k$. Like with all complexity parameters, the optimal value is dependent on the data, and is generally the one that exploits the best bias-variance tradeoff. <br><br>\n",
      "\n",
      "The following is an example grid search to find the optimal $k$. We also create 2 other variants of the data to show the effect of each on accuracy.<br>\n",
      "\n",
      "<ul>\n",
      "    <li>The training set size</li>\n",
      "    <li>The scaling of the features</li>\n",
      "</ul><br>\n",
      "\n",
      "Note that Euclidean distance is not scale invariant. Features with higher norms will in general dominate the neighborhood. If the features with the highest norms are also not that predictive, then the model predictions suffer. It is often best to rescale the features before running kNN.\n",
      "\n",
      "\n",
      "</p>"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "go=1\n",
      "if (go==1):\n",
      "    s1=[ testKnn(i,train[:50],test,'y_buy',p=2) for i in range(1,40) ]\n",
      "    s2=[ testKnn(i,train,test,'y_buy',p=2) for i in range(1,40) ]\n",
      "    s3=[ testKnn(i,train_scale,test_scale,'y_buy',p=2) for i in range(1,40) ]\n",
      "    \n",
      "x = range(1,40)\n",
      "    \n",
      "fig = plt.figure()\n",
      "ax = fig.add_subplot(111)\n",
      "p1 = plt.plot(x,s1,'r-',label='Unscaled, 50 Training Examples')\n",
      "p2 = plt.plot(x,s2,'b-',label='Unscaled, Full Training Set')\n",
      "p3 = plt.plot(x,s3,'g-',label='Scaled, Full Training Set')\n",
      "plt.title('Accuracy of kNN with varied k and other options')\n",
      "plt.legend(loc=3)\n",
      "ax.set_xlabel('k')\n",
      "ax.set_ylabel('Test Set Accuracy')\n",
      "plt.show()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\nAAAASUVORK5CYII=\n",
       "text": [
        "<matplotlib.figure.Figure at 0x108cbc350>"
       ]
      }
     ],
     "prompt_number": 8
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "<p>One major challenge with kNN is that the expected distance between any two points in $p$-dimensional space increases as $p$ increases. The following is a simulation that illustrates this concept.<br><br>\n",
      "\n",
      "We generate $n$ uniformly distributed samples in a $p$-dimensional hyper-cube. We then show the average distance between instances increases as we consider more dimensions.\n",
      "\n",
      "</p>"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "'''\n",
      "Show curse of dimensionality\n",
      "'''\n",
      "import numpy as np\n",
      "\n",
      "#Generate a random matrix in a uniform hyper-cube\n",
      "\n",
      "n = 100\n",
      "d = 50\n",
      "X = np.random.rand(n, d)\n",
      "\n",
      "dims = range(2,d)\n",
      "dists=dict()\n",
      "\n",
      "go = 1\n",
      "if (go==1):\n",
      "    for dim in dims:\n",
      "        dists[dim]=list()\n",
      "\n",
      "    #Now get all pairwise distances of various dimensions\n",
      "    for i in range(n):\n",
      "        for j in range(i+1,n):\n",
      "            for dim in dims:\n",
      "                dists[dim].append(np.sqrt((sum(X[i,:dim]-X[j,:dim])**2)))\n",
      "\n",
      "    means=[ np.array(dists[dim]).mean() for dim in dims ]\n",
      "\n",
      "\n",
      "    \n",
      "fig = plt.figure()\n",
      "ax = fig.add_subplot(111)\n",
      "plt.plot(dims,means)\n",
      "plt.title('Avg Pairwise Distance in Unit Hypercube by Dimension')\n",
      "plt.legend(loc=3)\n",
      "ax.set_xlabel('Dimension of Cube')\n",
      "ax.set_ylabel('Avg Pairwise Distance')\n",
      "plt.show()\n",
      "\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stderr",
       "text": [
        "/Users/briand/anaconda/lib/python2.7/site-packages/matplotlib/axes.py:4747: UserWarning: No labeled objects found. Use label='...' kwarg on individual plots.\n",
        "  warnings.warn(\"No labeled objects found. \"\n"
       ]
      },
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\n",
       "text": [
        "<matplotlib.figure.Figure at 0x100740210>"
       ]
      }
     ],
     "prompt_number": 20
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "<p>Now we plot this histogram of distances, and not just the mean distance by dimension $p$.</p>"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "'''\n",
      "Plot histogram of pairwise distances\n",
      "'''\n",
      "import matplotlib.pyplot as plt\n",
      "\n",
      "r = (0,12)\n",
      "b = 24\n",
      "fig = plt.figure()\n",
      "frame = plt.gca()\n",
      "ax = fig.add_subplot(111)\n",
      "h1 = plt.hist(dists[2], range=r, bins=b, normed=True, histtype='step',stacked=True,label='Dim=2')\n",
      "h2 = plt.hist(dists[10],range=r, bins=b, normed=True, histtype='step',stacked=True,label='Dim=10')\n",
      "h3 = plt.hist(dists[20],range=r, bins=b, normed=True, histtype='step',stacked=True,label='Dim=30')\n",
      "h4 = plt.hist(dists[40],range=r, bins=b, normed=True, histtype='step',stacked=True,label='Dim=40')\n",
      "frame.axes.get_yaxis().set_ticks([])\n",
      "ax.set_xlabel('Pairwise Distance')\n",
      "ax.set_ylabel('Pct of Pairs with Distance')\n",
      "plt.title('Histogram of Pairwise Distances by Dimensionality of X')\n",
      "plt.legend()\n",
      "plt.show()\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\nSUVORK5CYII=\n",
       "text": [
        "<matplotlib.figure.Figure at 0x1097983d0>"
       ]
      }
     ],
     "prompt_number": 27
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [],
     "language": "python",
     "metadata": {},
     "outputs": []
    }
   ],
   "metadata": {}
  }
 ]
}